package com.movie.service;

import com.movie.dto.UserMovieStatsDTO;
import com.movie.entity.Order;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;

public interface OrderService {

    /**
     * 根据ID获取订单
     */
    Order getOrderById(Long orderId);

    /**
     * 创建新订单
     */
    Order createOrder(Order order);

    /**
     * 更新订单状态
     */
    Order updateOrderStatus(Long id, Integer status);

    /**
     * 取消订单
     */
    void cancelOrder(Long orderId);

    /**
     * 获取用户的所有订单
     */
    List<Order> getOrdersByUserId(Long userId);

    /**
     * 统计用户的订单数量
     */
    int countOrdersByUserId(Long userId);

    /**
     * 根据过滤条件查找订单
     */
    List<Order> findOrdersWithFilters(String orderNumber, String username, LocalDate startDate, LocalDate endDate);

    /**
     * 获取所有订单 (管理员用)
     */
    List<Order> getAllOrders();

    /**
     * 分页获取所有订单 (管理员用)
     */
    Map<String, Object> getAllOrdersPaged(int page, int size);

    /**
     * 自动取消超时未支付的订单
     * 查找超过30分钟未支付的订单并取消
     * @return 取消的订单数量
     */
    int cancelTimeoutOrders();

    /**
     * 获取用户观影统计数据
     * @param userId 用户ID
     * @return 用户观影统计数据
     */
    UserMovieStatsDTO getUserMovieStats(Long userId);

    /**
     * 支付订单
     * @param orderId 订单ID
     * @param username 用户名
     * @return 支付后的订单
     */
    Order payOrder(Long orderId, String username);

    /**
     * 批量支付订单
     * @param orderIds 订单ID列表
     * @param username 用户名
     * @return 支付后的订单列表
     */
    List<Order> batchPayOrders(List<Long> orderIds, String username);
}
